package 力扣_简单题;

/**
 * @author 连安利
 * @version 1.0
 * @date 2021/3/27 17:08
 */
public class 回文数 {
    public static void main(String[] args) {
        int x = 0;
        System.out.println(isPalindrome2(x));
    }
//    方法一：将整数转化为字符串数组，通过遍历前和后进行判断，因为回文数第一个和最后一个相等，第二个和倒数第二个相等。。。
    public static boolean isPalindrome(int x) {
        String s = String.valueOf(x);
        char pro[] = s.toCharArray();
        int n = pro.length;
        int i = 0;
        while(n-1-i > 0){
            if(pro[i] == pro[n-1]){
                i++;
                n--;
            }else {
                return false;
            }
        }
        return true;
    }

//    方法二： 反转一半数据
    public static boolean isPalindrome2(int x) {

        if(x < 0 || (x != 0 && x % 10 == 0)){
//            如果x小于0或者x的第一位等于0，直接返回false，因为第一位为0的话不可能是回文数
            return  false;
        }
        int reversednumber = 0;
//        反转一半，临界值是原来的值小于等于反转的值
        while(x > reversednumber){
            reversednumber = reversednumber*10 + x%10;
            x /= 10;
        }
//        返回判断，如果是偶数直接判断，技术将反转数除以10 进行判断
        return  x == reversednumber || x == reversednumber / 10;
    }
}
